home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 9 / Night Owl CD-ROM (NOPV9) (Night Owl Publisher) (1993).ISO / 009a / snpd0493.zip / GETSTRNG.C < prev    next >
C/C++ Source or Header  |  1993-04-05  |  1KB  |  59 lines

  1. .I 3 1
  2. **
  3. .I 4 1
  4. ** Bob Stout 2/18/93, modified to use a static buffer
  5. .I 12 52
  6. {
  7.       int    newchar;
  8.       size_t i;
  9.       static size_t bufsize = 0;
  10.       static char  *buffer  = NULL;
  11.  
  12.       /* Get chars from keyboard and put them in buffer.  */
  13.  
  14.       for (i = 0; ((newchar = getchar()) != EOF) && (newchar != '\n')
  15.             && (newchar != '\r'); ++i )
  16.       {
  17.             if (i + 1 > bufsize)
  18.             {
  19.                   /* If buffer is full, resize it. */
  20.  
  21.                   if (NULL == (buffer = realloc(buffer, bufsize + BLOCKSIZ)))
  22.                   {
  23.                         puts("\agetstrng() - Insufficient memory");
  24.  
  25.                         /* Add terminator to partial string */
  26.  
  27.                         if (buffer)
  28.                               buffer[i] = '\0';
  29.                         return buffer;
  30.                   }
  31.                   bufsize += BLOCKSIZ;
  32.             }
  33.             buffer[i] = (char) newchar;
  34.       }
  35.       buffer[i] = '\0';   /* Tack on a null-terminator. */
  36.       return buffer;
  37. }
  38.  
  39. #ifdef TEST
  40.  
  41. #include <string.h>
  42.  
  43. int main(void)
  44. {
  45.       char *string;
  46.  
  47.       puts("Enter strings of any length or <Enter> to quit\n");
  48.       do
  49.       {
  50.             string = getstring();
  51.             printf("You entered:\n\"%s\"\n\n", string);
  52.       } while (strlen(string));
  53.       free(string);
  54.       return EXIT_SUCCESS;
  55. }
  56.  
  57. #endif /* TEST */
  58. .D 13 34
  59.